#include <iostream>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>

using namespace std;

void sig_handler(int signo){

    if(signo==SIGCHLD){
        wait(0);
    }

}


int main(int argc,char*argv[]){
    if(signal(SIGCHLD,sig_handler)<0){
        perror("signal");
        exit(1);
    }


    if(argc<2){
        printf("usage error:%d parameter\n",argc);
        exit(1);
    }

    int fd=open(argv[1],O_WRONLY);
    if(fd<0){
        perror("open");
        exit(1);
    }

    pid_t pid;

    pid=fork();
    if(pid<0){
        perror("fork");
        exit(1);
    }else if(pid==0){
        sleep(3);
        char *str="hello child";
        ssize_t size=strlen(str)*sizeof(char);
        //fd是从父进程中复制过来的，都指向同一个文件
        if(write(fd,str,size)!=size){
            perror("write");
            exit(1);
        }

        close(fd);

    }else{

        //f父进程将文件偏移量调整到文件尾部
        if(lseek(fd,0L,SEEK_END)<0){
            perror("lseek");
            exit(1);
        }



    }





    //关闭文件描述符
    close(fd);

    return 0;
}